home *** CD-ROM | disk | FTP | other *** search
- * access to qdos traps (1,2,and 3) for BCPL
- *
- * Dr.A.J.Finch 27/5/87
- * Physics Dept.,
- * Lancaster University,
- * Lancaster
- *
- rorg $0
- qtrap equ 276 this is the global to be assigned to this routine
- * in global vector - alter kermain routine accordingly!
- * i.e.
- * global $(
- * qtrap : ug + 176
- * $)
- *
-
- first dc.l (endmod-first)/4
-
- cnop 0,4
-
- label
- BRA start
- DC.B 'QTRAP' THIS HELPS FOR DEBUGGING WITH C1 MONITOR!
- CNOP 0,4
-
- start
- movem.l d0-d7/a0-a6,-(sp) just to be safe !
- *
- *set up registers for trap
- *
- move.l d1,d4 save trap number
- lsl.l #2,d2 bcpl address *4 for byte addresses
- move.l d2,a5 save address of input regs.
- lsl.l #2,d3 bcpl address *4 for byte addresses
- move.l d3,a6 save address of output regs.
-
- *
- * copy over input register
- *
- move.l 0(a5),d0
- move.l 4(a5),d1
- move.l 8(a5),d2
- move.l 12(a5),d3
- move.l 16(a5),a0
- move.l 20(a5),a1
- move.l 24(a5),a2
- move.l 28(a5),a3
- *
- * just in case - save register needed to return values
- * of output registers
- *
- move.l a6,-(sp)
-
- cmpi.w #1,d4
- beq trap1
- cmpi.w #2,d4
- beq trap2
- cmpi.w #3,d4
- beq trap3
- bra endtrap
-
- trap1 trap #1
- bra endtrap
- trap2 trap #2
- bra endtrap
- trap3 trap #3
- *
- endtrap
- *
- * return registers
- *
- move.l (sp)+,a6 restore address of output vector
- *
- * and copy over registers
- *
- move.l d0,0(a6)
- move.l d1,4(a6)
- move.l d2,8(a6)
- move.l d3,12(a6)
- move.l a0,16(a6)
- move.l a1,20(a6)
- move.l a2,24(a6)
- move.l a3,28(a6)
-
- *
- * restore previously saved registers
- *
- movem.l (sp)+,d0-d7/a0-a6
- *
- * and finally return to bcpl
- *
- jmp (a6)
- *
- *
- * globals
- *
- cnop 0,4
- dc.l 0
- dc.l qtrap,(label-first)
- dc. qtrap
-
- endmod end
-